package com.svh.Paginator;

import com.svh.Controlador.SesionControlador;
import com.svh.Entidad.Pedido;
import com.svh.Hibernate.HibernatePaginator;
import javax.faces.context.FacesContext;
import org.hibernate.HibernateException;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Luis Alonso Ballena Garcia
 *
 * Variante : Se tendra que hacer uso del empleado de Sesión para solo mostrar
 * solo los pedidos del empleado, siempre y cuando no sea el empleado
 * Administrador
 *
 */
public class PedidoPaginator extends HibernatePaginator<Pedido> {

    SesionControlador sesionControlador;

    public static final int PEDIDO_VENDEDOR = 1;

    public static final int PEDIDO_SECRETARIA = 2;

    public PedidoPaginator() {
        sesionControlador = (SesionControlador) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("sesionControlador");
    }

    @Override
    public void initFiltro() {
        DetachedCriteria criteria = null;
        try {
            criteria = DetachedCriteria.forClass(Pedido.class, "pedido");
            if (sesionControlador != null && sesionControlador.getEmpleado().getId().intValue() != 1) {
                switch (sesionControlador.getEmpleado().getTipo().getId()) {
                    case PEDIDO_VENDEDOR:
                        criteria.add(Restrictions.eq("pedido.empleado.id", sesionControlador.getEmpleado().getUsuario().getId().intValue()));
                        criteria.addOrder(Order.asc("pedido.estado"));
                        criteria.addOrder(Order.desc("pedido.fechaRegistro"));
                        break;
                    case PEDIDO_SECRETARIA:
                        criteria.add(Restrictions.eq("pedido.estado",Pedido.PENDIENTE));
                        break;
                }
            }
            super.filtroCriteria = criteria;
        } catch (HibernateException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void setSesionControlador(SesionControlador sesionControlador) {
        this.sesionControlador = sesionControlador;
    }

}
